<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
        var obj={
            id:1,
            name:'andy',
            msg:{
                age:18
            },
            color:['pink','red']
        }
        var o={}
        // for(var k in obj){
        //     o[k]=obj[k]
        // }
        // o.msg.age=20  //因为此时是浅拷贝，拷贝的是msg的地址，此时o和obj的msg指向的是同一片地址空间的同一个数据
        // console.log(obj);//浅拷贝拷贝一层，因此表层的数据被成功拷贝
        // console.log(o);//修改o中的msg实际上就是修改obj的msg
        // Object.assign(o,obj) //ES6中的浅拷贝方法 (target,source)
        // console.log(o);
        
        //深拷贝会复制数据开辟一个新的空间
        function deepcopy(target,source){
            for(var k in source){
                if(source[k] instanceof Array){
                    target[k]=[]
                    deepcopy(target[k],source[k])
                }
                else if(source[k] instanceof Object){
                    target[k]={}
                    deepcopy(target[k],source[k])
                }
                else{
                    target[k]=source[k]
                }
            }
        }
        deepcopy(o,obj)
        console.log(o);
        
    </script>
</body>
</html>